package edu.client;

import java.util.Date;
import java.util.List;

import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextBox;

import edu.shared.DTO.ProductoDTO;
import edu.shared.DTO.RequerimientoCompraDTO;

public class P_ImprimirPresupuesto extends PopupPanel{

	//columnas para la tabla requerimientos de compra
		private static final int COL_ELEMENTO = 0;
		private static final int COL_MATERIAL = 1;
		private static final int COL_MEDIDA_FIJA = 2;
		private static final int COL_MEDIDA_VARIABLE_1 = 3;
		private static final int COL_MEDIDA_VARIABLE_2 = 4;
		private static final int COL_CANTIDAD_COMPRAR = 5;
		
		//componentes de la pantalla
		private FlexTable ftRequerimientosCompra;
		
		private List<RequerimientoCompraDTO> requerimientos;
		
		public P_ImprimirPresupuesto(List<RequerimientoCompraDTO> requerimientosCompra) {
			
			requerimientos = requerimientosCompra;
			
			LayoutPanel layoutPanel = new LayoutPanel();
			setWidget(layoutPanel);
			layoutPanel.setSize("873px", "575px");
			setStyleName("fondoPopup");
				
			Label lblSolicitudPresupuesto = new Label("SOLICITUD DE PRESUPUESTO");
			lblSolicitudPresupuesto.setStyleName("labelTitulo");
			layoutPanel.add(lblSolicitudPresupuesto);
			layoutPanel.setWidgetLeftWidth(lblSolicitudPresupuesto, 2.5, Unit.PCT, 95.0, Unit.PCT);
			layoutPanel.setWidgetTopHeight(lblSolicitudPresupuesto, 15.0, Unit.PX, 50.0, Unit.PX);			
			
			Label lblInformacion = new Label("DE:");
			layoutPanel.add(lblInformacion);
			lblInformacion.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
			layoutPanel.setWidgetLeftWidth(lblInformacion, 0.0, Unit.PCT, 14.5, Unit.PCT);
			layoutPanel.setWidgetTopHeight(lblInformacion, 80.0, Unit.PX, 19.0, Unit.PX);
			
			TextBox informacionTB = new TextBox();
			layoutPanel.add(informacionTB);
			layoutPanel.setWidgetLeftWidth(informacionTB, 15.0, Unit.PCT, 15.0, Unit.PCT);
			layoutPanel.setWidgetTopHeight(informacionTB, 75.0, Unit.PX, 32.0, Unit.PX);
			informacionTB.setText("INTESA");
			informacionTB.setEnabled(false);
			
			DateTimeFormat formatoFecha = DateTimeFormat.getFormat("dd/MM/yyyy");
			Label lblFecha = new Label("FECHA DE SOLICITUD:");
			layoutPanel.add(lblFecha);
			lblFecha.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
			layoutPanel.setWidgetLeftWidth(lblFecha, 34.5, Unit.PCT, 20.0, Unit.PCT);
			layoutPanel.setWidgetTopHeight(lblFecha, 80.0, Unit.PX, 19.0, Unit.PX);

			TextBox fechaTB = new TextBox();
			layoutPanel.add(fechaTB);
			layoutPanel.setWidgetLeftWidth(fechaTB, 55.0, Unit.PCT, 15.0, Unit.PCT);
			layoutPanel.setWidgetTopHeight(fechaTB, 75.0, Unit.PX, 32.0, Unit.PX);
			fechaTB.setText(formatoFecha.format(new Date()));
			fechaTB.setEnabled(false);
			
			Label lbProductos = new Label("PRODUCTOS");
			lbProductos.setStyleName("labelTitulo");
			layoutPanel.add(lbProductos);
			layoutPanel.setWidgetLeftWidth(lbProductos, 2.5, Unit.PCT, 95.0, Unit.PCT);
			layoutPanel.setWidgetTopHeight(lbProductos, 130.0, Unit.PX, 50.0, Unit.PX);
			
			ScrollPanel scrollPanelRequerimientosCompra = new ScrollPanel();
			scrollPanelRequerimientosCompra.setStyleName("tabla");
			layoutPanel.add(scrollPanelRequerimientosCompra);
			layoutPanel.setWidgetLeftWidth(scrollPanelRequerimientosCompra, 5.0, Unit.PCT, 90.0, Unit.PCT);
			layoutPanel.setWidgetTopHeight(scrollPanelRequerimientosCompra, 200.0, Unit.PX, 250.0, Unit.PX);
			
			ftRequerimientosCompra = new FlexTable();
			scrollPanelRequerimientosCompra.setWidget(ftRequerimientosCompra);
			ftRequerimientosCompra.setSize("100%", "100%");
			
			//cargamos el encabezado de la tabla			
			// columna elemento
			ftRequerimientosCompra.setText(0, COL_ELEMENTO, "ELEMENTO");
			ftRequerimientosCompra.getCellFormatter().setWidth(0, COL_ELEMENTO, "30%");
					
			// columna material
			ftRequerimientosCompra.setText(0, COL_MATERIAL, "MATERIAL");
			ftRequerimientosCompra.getCellFormatter().setWidth(0, COL_MATERIAL, "30%");
					
			// columna medida fija
			ftRequerimientosCompra.setText(0, COL_MEDIDA_FIJA, "MEDIDA FIJA");
			ftRequerimientosCompra.getCellFormatter().setWidth(0, COL_MEDIDA_FIJA, "10%");
					
			// columna medida variable 1
			ftRequerimientosCompra.setText(0, COL_MEDIDA_VARIABLE_1, "MEDIDA VARIABLE 1");
			ftRequerimientosCompra.getCellFormatter().setWidth(0, COL_MEDIDA_VARIABLE_1, "10%");
					
			// columna medida variable 2
			ftRequerimientosCompra.setText(0, COL_MEDIDA_VARIABLE_2, "MEDIDA VARIABLE 2");
			ftRequerimientosCompra.getCellFormatter().setWidth(0, COL_MEDIDA_VARIABLE_2, "10%");
			
			// columna cantidad a comprar
			ftRequerimientosCompra.setText(0, COL_CANTIDAD_COMPRAR, "CANTIDAD A COMPRAR");
			ftRequerimientosCompra.getCellFormatter().setWidth(0, COL_CANTIDAD_COMPRAR, "10%");
			
			// seteamos el estilo a los encabezados
			ftRequerimientosCompra.getRowFormatter().addStyleName(0, "tablaEncabezado");
											
			Label lblPie = new Label("");
			lblPie.setStyleName("labelTitulo");
			layoutPanel.add(lblPie);
			layoutPanel.setWidgetLeftWidth(lblPie, 2.5, Unit.PCT, 95.0, Unit.PCT);
			layoutPanel.setWidgetTopHeight(lblPie, 450.0, Unit.PX, 50.0, Unit.PX);
			
			Button btnSalir = new Button();
			btnSalir.setText("SALIR");
			btnSalir.getElement().setId("btnSalir");
			
			//al presionar el botón salir
			btnSalir.addClickHandler(new ClickHandler() {
				public void onClick(ClickEvent event) {
					//cerramos el popup
					salir();	
				}
			});
			
			layoutPanel.add(btnSalir);
			layoutPanel.setWidgetRightWidth(btnSalir, 5.0, Unit.PCT, 10.0, Unit.PCT);
			layoutPanel.setWidgetBottomHeight(btnSalir, 15.0, Unit.PX, 28.0, Unit.PX);
			
			Button btnImprimir = new Button("");
			btnImprimir.setText("IMPRIMIR");
			btnImprimir.getElement().setId("btnImprimir");
			
			//al presionar el botón imprimir
			btnImprimir.addClickHandler(new ClickHandler() {
				public void onClick(ClickEvent event) {
					imprimir();
				}
			});
			
			layoutPanel.add(btnImprimir);
			layoutPanel.setWidgetRightWidth(btnImprimir, 17.5, Unit.PCT, 10.0, Unit.PCT);
			layoutPanel.setWidgetBottomHeight(btnImprimir, 15.0, Unit.PX, 28.0, Unit.PX);			
			
					
			cargarRequerimientos();
		}
		
		
		/**
		 * Método que carga la tabla con los productos del presupuesto
		 */
		private void cargarRequerimientos()
		{								
			int numeroFila = 1;
			
			for(RequerimientoCompraDTO requerimiento : requerimientos)
			{
				ProductoDTO producto = requerimiento.getRequerimientoMaterial().getProducto();
				
				//columna elemento
				ftRequerimientosCompra.setWidget(numeroFila, COL_ELEMENTO, new Label(producto.getElemento().getNombre()));
				ftRequerimientosCompra.getCellFormatter().setWordWrap(numeroFila, COL_ELEMENTO, true);
				
				//columna material
				ftRequerimientosCompra.setWidget(numeroFila, COL_MATERIAL, new Label(producto.getMaterial().getNombre()));
				ftRequerimientosCompra.getCellFormatter().setWordWrap(numeroFila, COL_MATERIAL, true);
				
				// columna medida fija
				ftRequerimientosCompra.setWidget(numeroFila, COL_MEDIDA_FIJA, new Label(producto.getMedidaFija().getMedida()));
				ftRequerimientosCompra.getCellFormatter().setWordWrap(numeroFila, COL_MEDIDA_FIJA, true);
		
				// columna medida variable 1
				ftRequerimientosCompra.setWidget(numeroFila, COL_MEDIDA_VARIABLE_1, new Label(String.valueOf(requerimiento.getMedidaVariable1())));
				ftRequerimientosCompra.getCellFormatter().setWordWrap(numeroFila, COL_MEDIDA_VARIABLE_1, true);

				// columna medida variable 2
				ftRequerimientosCompra.setWidget(numeroFila, COL_MEDIDA_VARIABLE_2, new Label(String.valueOf(requerimiento.getMedidaVariable2())));
				ftRequerimientosCompra.getCellFormatter().setWordWrap(numeroFila, COL_MEDIDA_VARIABLE_2, true);
												
				// columna cantidad a comprar
				ftRequerimientosCompra.setWidget(numeroFila, COL_CANTIDAD_COMPRAR, new Label(String.valueOf(requerimiento.getCantidadAComprar())));
				ftRequerimientosCompra.getCellFormatter().setWordWrap(numeroFila, COL_CANTIDAD_COMPRAR, true);
				
				
				//seteamos el estilo de renglón de tabla
				ftRequerimientosCompra.getRowFormatter().setStyleName(numeroFila, "tablaRenglon");
				
				numeroFila++;
			}
		}
		
		/**
		 * Método que imprimir la pantalla. Es código nativo JavaScript, no está comentado.
		 */
		private static native void imprimir() /*-{
			$wnd.document.getElementsByClassName("panelFondo")[0].style.visibility = "hidden"
			$wnd.document.getElementsByClassName('gwt-PopupPanelGlass')[0].style.visibility = 'hidden'
			$wnd.document.getElementById('btnSalir').style.visibility = "hidden"
			$wnd.document.getElementById('btnImprimir').style.visibility = "hidden"
			$wnd.print();
			$wnd.document.getElementsByClassName("panelFondo")[0].style.visibility = "visible";
			$wnd.document.getElementsByClassName('gwt-PopupPanelGlass')[0].style.visibility = 'visible'
			$wnd.document.getElementById('btnSalir').style.visibility = "visible"
			$wnd.document.getElementById('btnImprimir').style.visibility = "visible"
		}-*/; 
		
		/**
		 * Método que cierra el popup
		 */
		private void salir()
		{
			//cerramos el popup
			this.hide();
		}
	}
